package com.yxw.yxnet_cd_center.customer_service.mapper;

import com.yxw.yxnet_cd_center.customer_service.entity.YxCsOperateCustEntity;
import com.yxw.yxnet_cd_center.customer_service.entity.YxCsOperatePushCustEntity;
import com.yxw.yxnet_cd_center.customer_service.entity.YxCsOperateProductEntity;
import com.yxw.yxnet_cd_center.customer_service.entity.YxCsOperateTagEntity;
import com.yxw.yxnet_cd_center.customer_service.entity.YxCsCustomOperateEntity;
import com.yxw.yxnet_cd_center.customer_service.entity.YxCsPushProductEntity;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yxw.yxnet_cd_center.customer_service.dto.CustomOperateQueryDTO;
import com.yxw.yxnet_cd_center.customer_service.dto.ProductQueryDTO;
import com.yxw.yxnet_cd_center.customer_service.vo.CustomOperateVO;
import com.yxw.yxnet_cd_center.customer_service.vo.NoticeUserVo;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 客户运营Mapper接口
 *
 * @author xiexuxin
 * @date 2023-09-24
 */
@Repository
public interface CustomOperateMapper extends BaseMapper<YxCsCustomOperateEntity> {

    /**
     * 客户运营“选择客户”的状态文本  0:全部客户 1:按标签选择客户
     */
    String[] CHOOSE_TYPE = {"全部客户", "按标签选择客户"};

    /**
     * 客户运营“运营方式”的状态文本  2:客户消息推送 1:短信推送
     */
    String[] OPERATE_MODE = {"客户消息推送", "短信推送", "客户消息推送"};

    /**
     * 客户运营“发送方式”的状态文本  0:手动发送 1:定时发送
     */
    String[] PUSH_MODE = {"手动发送", "定时发送"};

    /**
     * 客户运营“运营状态”的状态文本  0:待发送 1:已发送 2:已过期
     */
    String[] OPERATE_STATUS = {"待发送", "已发送", "已过期"};

    /**
     * 根据id删除客户运营数据
     *
     * @param operateId 部门主键
     * @return 结果
     */
    int deleteByOperateId(Long operateId);

    /**
     * 批量删除客户运营数据
     *
     * @param operateIds 需要删除的数据主键集合
     * @return 结果
     */
    int deleteByOperateIds(List<Long> operateIds);

    /**
     * 根据id查询客户运营数据详情
     * @param operateId
     * @return
     */
    CustomOperateVO selectOperateById(Long operateId);

    /**
     * 查询客户运营数据列表
     * @return
     */
    List<CustomOperateVO> operateList();

    /**
     * 条件查询客户运营数据列表
     * @return
     */
    List<CustomOperateVO> getOperateList(Page<CustomOperateVO> page, @Param("dto") CustomOperateQueryDTO dto);

    /**
     * 客户运营商品关联
     * @param operateProductList
     * @return 影响行数
     */
    int insertOperateProductBatch(List<YxCsOperateProductEntity> operateProductList);

    /**
     * 客户与运营关联
     * @param operateCustList
     * @return 影响行数
     */
    int insertOperateCustBatch(List<YxCsOperateCustEntity> operateCustList);

    /**
     * 客户运营标签关联
     * @param operateTagList
     * @return 影响行数
     */
    int insertOperateTagBatch(List<YxCsOperateTagEntity> operateTagList);

    /**
     * 查询所有客户
     * @return
     */
    List<YxCsOperatePushCustEntity> findAll();

    /**
     * 根据标签查询客户
     * @param tagIds
     * @return
     */
    List<YxCsOperatePushCustEntity> findByCustTagId(List<Long> tagIds);

    /**
     * 查询商品列表
     * @return
     */
    List<YxCsPushProductEntity> productList();

    /**
     * 条件查询商品列表
     * @param productQueryDTO
     * @return
     */
    List<YxCsPushProductEntity> getProductList(ProductQueryDTO productQueryDTO);

    /**
     *
     * @param operateStatusName
     * @return
     */
    List<YxCsCustomOperateEntity> getOperateByStatus(String operateStatusName);

}
